//encrypt.js
/**
* 通过crypto-js实现 加解密工具
* AES
* @author: wfk
* npm install crypto-js --save
*/
import CryptoJS from 'crypto-js'

const KP = {
  key: '32824659', // 秘钥 16*n:
  iv: '1234567812345678'  // 偏移量
}

const key = CryptoJS.enc.Utf8.parse(KP.key)  //十六位十六进制数作为密钥
const iv = CryptoJS.enc.Utf8.parse(KP.iv)   //十六位十六进制数作为密钥偏移量

function getAesString(data, key, iv) { // 加密
  let encrypted = CryptoJS.DES.encrypt(data, key,
    {
      iv,
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    })
  return encrypted.toString()    // 返回的是base64格式的密文
}

function getDAesString(encrypted, key, iv) { // 解密
  let decrypted = CryptoJS.DES.decrypt(encrypted, key,
    {
      iv,
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    })
  return decrypted.toString(CryptoJS.enc.Utf8)
}

// AES 对称秘钥加密
const aes = {
  en: (data) => getAesString(data, key, iv),
  de: (data) => getDAesString(data, key, iv)
}

// BASE64
const base64 = {
  en: (data) => CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(data)),
  de: (data) => CryptoJS.enc.Base64.parse(data).toString(CryptoJS.enc.Utf8)
}

// SHA256
const sha256 = (data) => {
  return CryptoJS.SHA256(data).toString()
}

// MD5
const md5 = (data) => {
  return CryptoJS.MD5(data).toString()
}

export {
  aes,
  md5,
  sha256,
  base64
}
